package com.kh.rationaldrugreview.service;

/**
 * 药品知识图谱提取提示词模板
 * 精心设计的提示词用于从药品说明书中提取实体和关系
 */
public class KnowledgeGraphPromptTemplate {
    
    /**
     * 系统角色提示词
     */
    public static final String SYSTEM_PROMPT = """
        你是一位专业的药学和医学专家，专门负责从药品说明书中提取结构化信息并构建知识图谱。
        你需要准确识别药品、疾病、症状、成分、基因、酶、不良反应等实体，以及它们之间的关系。
        
        你的任务是：
        1. 精确提取所有相关实体及其属性
        2. 识别实体之间的关系并评估关系强度
        3. 使用标准医学术语和编码（如ICD-10、ATC分类等）
        4. 保持信息的完整性和准确性
        """;
    
    /**
     * 主要的实体和关系提取提示词
     */
    public static final String ENTITY_EXTRACTION_PROMPT = """
        请仔细分析以下药品说明书内容，提取所有实体和关系。
        
        ## 需要提取的实体类型：
        
        ### 1. DRUG（药品）实体
        必须提取的属性：
        - genericName: 通用名/国际非专利名（INN）
        - brandName: 商品名
        - dosageForm: 剂型（片剂、胶囊、注射液等）
        - specification: 规格（如100mg、10ml:50mg）
        - manufacturer: 生产企业
        - approvalNumber: 批准文号
        - atcCode: ATC分类代码（如有）
        - composition: 主要成分及含量
        - chemicalName: 化学名称
        - molecularFormula: 分子式
        - molecularWeight: 分子量
        - halfLife: 半衰期
        - bioavailability: 生物利用度
        - proteinBinding: 蛋白结合率
        - metabolismPathway: 代谢途径
        - excretion: 排泄途径
        - storage: 贮藏条件
        - validity: 有效期
        
        ### 2. DISEASE（疾病）实体
        必须提取的属性：
        - name: 疾病名称（中文/英文）
        - icd10Code: ICD-10编码
        - category: 疾病分类
        - symptoms: 主要症状
        - complications: 可能的并发症
        - prevalence: 发病率
        - riskFactors: 危险因素
        
        ### 3. SYMPTOM（症状）实体
        必须提取的属性：
        - name: 症状名称
        - description: 症状描述
        - severity: 严重程度（轻度/中度/重度）
        - frequency: 发生频率
        - bodySystem: 涉及的身体系统
        
        ### 4. INGREDIENT（成分）实体
        必须提取的属性：
        - name: 成分名称
        - type: 成分类型（活性成分/辅料）
        - content: 含量
        - unit: 单位
        - function: 功能作用
        
        ### 5. GENE（基因）实体
        必须提取的属性：
        - symbol: 基因符号（如CYP2D6、CYP3A4）
        - fullName: 基因全名
        - chromosome: 染色体位置
        - polymorphisms: 多态性位点
        - clinicalSignificance: 临床意义
        
        ### 6. ENZYME（酶）实体
        必须提取的属性：
        - name: 酶名称
        - ecNumber: EC编号
        - function: 功能
        - substrate: 底物
        - inhibitors: 抑制剂
        - inducers: 诱导剂
        
        ### 7. ADVERSE_REACTION（不良反应）实体
        必须提取的属性：
        - name: 不良反应名称
        - frequency: 发生频率（很常见≥10%、常见1-10%、偶见0.1-1%、罕见0.01-0.1%、非常罕见<0.01%）
        - severity: 严重程度
        - bodySystem: 影响的身体系统
        - mechanism: 发生机制
        - management: 处理措施
        
        ### 8. DOSAGE（用法用量）实体
        必须提取的属性：
        - population: 适用人群（成人/儿童/老年人/特殊人群）
        - route: 给药途径
        - dose: 剂量
        - frequency: 给药频率
        - duration: 疗程
        - maxDailyDose: 最大日剂量
        - adjustmentNeeded: 是否需要剂量调整
        - adjustmentCriteria: 剂量调整标准
        - pregnancyDosage: 孕期剂量调整
        - pediatricDosage: 儿童剂量（按年龄/体重）
        - geriatricDosage: 老年人剂量调整
        
        ### 9. CONTRAINDICATION（禁忌症）实体
        必须提取的属性：
        - condition: 禁忌情况
        - type: 类型（绝对禁忌/相对禁忌）
        - reason: 禁忌原因
        - riskLevel: 风险等级
        
        ### 10. PATIENT_PROFILE（患者画像）实体
        必须提取的属性：
        - ageGroup: 年龄组（新生儿0-28天/婴儿1-12月/幼儿1-3岁/儿童3-12岁/青少年12-18岁/成人18-65岁/老年人>65岁）
        - gender: 性别要求（男/女/不限）
        - pregnancyCategory: FDA妊娠分级（A/B/C/D/X）
        - pregnancyTrimester: 孕期（孕早期/孕中期/孕晚期）
        - lactation: 哺乳期用药（安全/慎用/禁用）
        - renalFunction: 肾功能要求
        - hepaticFunction: 肝功能要求
        - contraindicatedConditions: 禁忌情况
        - specialWarnings: 特殊警告
        
        ### 11. PREGNANCY_CATEGORY（妊娠分级）实体
        必须提取的属性：
        - category: FDA分级（A/B/C/D/X）
        - description: 分级说明
        - riskSummary: 风险概述
        - clinicalConsiderations: 临床考虑
        - animalStudies: 动物研究结果
        - humanStudies: 人体研究结果
        
        ### 12. INTERACTION（相互作用）实体
        必须提取的属性：
        - drugA: 药物A
        - drugB: 药物B
        - interactionType: 相互作用类型（药代动力学/药效动力学）
        - mechanism: 作用机制
        - clinicalEffect: 临床效应
        - severity: 严重程度（轻微/中度/严重）
        - management: 处理建议
        
        ## 需要识别的关系类型：
        
        1. TREATS（治疗）: Drug -> Disease
           - efficacy: 疗效
           - evidenceLevel: 证据级别
           - clinicalTrials: 临床试验
        
        2. CAUSES（引起）: Drug -> Adverse_Reaction
           - frequency: 发生频率
           - severity: 严重程度
           - reversibility: 可逆性
        
        3. CONTRAINDICATED_FOR（禁忌于）: Drug -> Disease/Condition
           - type: 禁忌类型
           - reason: 禁忌原因
           - alternative: 替代方案
        
        4. METABOLIZED_BY（被...代谢）: Drug -> Enzyme
           - pathway: 代谢途径
           - percentage: 代谢百分比
           - isMainPathway: 是否主要途径
        
        5. INHIBITS（抑制）: Drug -> Enzyme
           - inhibitionType: 抑制类型（竞争性/非竞争性）
           - ki: 抑制常数
           - clinicalRelevance: 临床相关性
        
        6. INDUCES（诱导）: Drug -> Enzyme
           - inductionFold: 诱导倍数
           - timeToMaxEffect: 达到最大效应时间
        
        7. INTERACTS_WITH（相互作用）: Drug -> Drug
           - interactionLevel: 相互作用等级（A-无临床意义、B-无需采取措施、C-监测治疗、D-考虑调整治疗、X-避免合用）
           - mechanism: 机制
           - recommendation: 推荐措施
        
        8. HAS_SYMPTOM（具有症状）: Disease -> Symptom
           - frequency: 症状频率
           - diagnostic: 是否为诊断性症状
        
        9. CONTAINS（包含）: Drug -> Ingredient
           - amount: 含量
           - unit: 单位
           - isActive: 是否为活性成分
        
        10. AFFECTS（影响）: Gene -> Drug
            - effectType: 影响类型（代谢/转运/靶点）
            - phenotype: 表型
            - dosageAdjustment: 剂量调整建议
        
        11. SUITABLE_FOR（适用于）: Drug -> PATIENT_PROFILE
            - conditions: 适用条件
            - dosageAdjustment: 剂量调整
            - monitoringRequired: 是否需要监测
        
        12. CONTRAINDICATED_FOR_PROFILE（特定人群禁用）: Drug -> PATIENT_PROFILE
            - reason: 禁用原因
            - severity: 严重程度
            - alternative: 替代方案
        
        13. REQUIRES_ADJUSTMENT_FOR（需要调整）: Drug -> PATIENT_PROFILE
            - adjustmentType: 调整类型（剂量/频率/疗程）
            - adjustmentFactor: 调整系数
            - monitoringParameters: 监测参数
        
        14. HAS_PREGNANCY_CATEGORY（妊娠分级）: Drug -> PREGNANCY_CATEGORY
            - evidenceQuality: 证据质量
            - updateDate: 更新日期
        
        ## 关系强度评分标准（1-10分）：
        
        - 10分：黑框警告、绝对禁忌、危及生命的相互作用
        - 9分：严重不良反应、主要代谢途径、强效抑制/诱导
        - 8分：临床重要的相互作用、常见严重不良反应
        - 7分：需要剂量调整的相互作用、常见不良反应
        - 6分：需要监测的相互作用、偶见不良反应
        - 5分：理论上的相互作用、罕见不良反应
        - 3-4分：轻微相互作用、非常罕见不良反应
        - 1-2分：临床意义不大的相互作用
        
        ## 输出格式要求：
        
        请以JSON格式输出，结构如下：
        ```json
        {
          "entities": [
            {
              "id": "entity_1",
              "type": "DRUG",
              "name": "实体名称",
              "attributes": {
                "属性名": "属性值",
                ...
              }
            },
            ...
          ],
          "relationships": [
            {
              "id": "rel_1",
              "type": "TREATS",
              "source": "entity_1",
              "target": "entity_2",
              "strength": 8,
              "properties": {
                "属性名": "属性值",
                ...
              }
            },
            ...
          ]
        }
        ```
        
        ## 特别注意提取以下患者特征相关信息：
        
        1. **妊娠期用药信息**：
           - FDA妊娠分级（A/B/C/D/X）
           - 各孕期（早/中/晚）的用药建议
           - 对胎儿的潜在影响
           - 是否可通过胎盘屏障
        
        2. **哺乳期用药信息**：
           - 是否分泌到乳汁
           - 乳汁中的浓度
           - 对婴儿的潜在影响
           - 哺乳期用药建议
        
        3. **儿童用药信息**：
           - 各年龄段的剂量（新生儿/婴儿/幼儿/儿童/青少年）
           - 按体重计算的剂量
           - 儿童禁忌症
           - 生长发育影响
        
        4. **老年人用药信息**：
           - 剂量调整建议
           - 特殊监测要求
           - 跌倒风险
           - 认知影响
        
        5. **性别差异**：
           - 是否存在性别特异性反应
           - 激素影响
           - 月经期用药注意事项
        
        6. **肝肾功能不全**：
           - 不同程度肝肾功能不全的剂量调整
           - 禁忌情况
           - 监测指标
        
        ## 药品说明书内容：
        {manualText}
        
        ## 注意事项：
        1. 确保所有医学术语准确无误
        2. 尽可能提取完整的属性信息
        3. 关系强度评分要基于临床重要性
        4. 使用标准的医学编码系统
        5. 保持实体ID的唯一性和关联性
        6. 特别关注特殊人群用药信息
        7. 明确标注FDA妊娠分级
        """;
    
    /**
     * 验证和补充提示词
     */
    public static final String VALIDATION_PROMPT = """
        请检查并补充以下提取的实体和关系：
        
        1. 验证所有实体的必要属性是否完整
        2. 检查是否遗漏重要的实体或关系
        3. 确认关系强度评分是否合理
        4. 补充缺失的医学编码（ICD-10、ATC等）
        5. 纠正任何明显的错误或不一致
        
        原始提取结果：
        {extractedData}
        
        药品说明书原文：
        {originalText}
        
        请返回验证和补充后的完整JSON结果。
        """;
    
    /**
     * 关系推理提示词
     */
    public static final String RELATIONSHIP_INFERENCE_PROMPT = """
        基于已提取的实体，请推理可能存在的间接关系：
        
        1. 药物-药物相互作用的传递性
        2. 疾病-症状-药物的关联
        3. 基因-酶-药物的代谢链
        4. 禁忌症的关联推理
        5. 不良反应的机制关联
        
        已知实体和关系：
        {knownData}
        
        请推理并返回新发现的关系，格式同上。
        """;
}